package be.ipl.finito.daoimpl;

import java.util.List;

import javax.ejb.ObjectNotFoundException;
import javax.ejb.Stateless;

import be.ipl.finito.dao.PartieDao;
import be.ipl.finito.domaine.Joueur;
import be.ipl.finito.domaine.Partie;
import be.ipl.finito.domaine.Partie.Etat;

@SuppressWarnings("serial")
@Stateless
public class PartieDaoImpl extends DaoImpl<Integer, Partie> implements
		PartieDao {

	@Override
	public Partie rechercher(String nomPartie) throws ObjectNotFoundException {
		String queryString = "select p from Partie p where p.nom = ?1";
		Partie p = recherche(queryString, nomPartie);
		if (p == null)
			throw new ObjectNotFoundException("Cette partie n'existe pas");
		return p;
	}

	@Override
	public List<Partie> rechercherParties(Joueur joueur) {

		String queryString = "SELECT pa FROM Joueur j, IN(j.plateaux) pl, IN(pl.partie) pa WHERE j.login = ?1";

		return liste(queryString, joueur.getLogin());
	}

	@Override
	public List<Partie> listerPartiesEnAttente() {
		String queryString = "select p from Partie p where p.etat = ?1";
		return liste(queryString, Etat.INITIAL);
	}

	@Override
	public List<Partie> listerPartiesSuspendues(Joueur joueur) {
		String queryString = "SELECT pa FROM Plateau pl, IN(pl.joueur) j, IN(pl.partie) pa WHERE j.login = ?1 AND pa.etat = ?2";
		return liste(queryString, joueur.getLogin(), Etat.SUSPENDUE);
	}

}
